package com.atguigu.srb.core;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.junit.jupiter.api.Test;

import java.util.Collections;

/**
 * 代码生成器参考文档：https://blog.51cto.com/u_15349616/4586809
 */
public class CodeGenerator {

    @Test
    public void test(){
        //String projectPath = System.getProperty("user.dir");
        //System.out.println(projectPath);

        FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3306/srb?useSSL=false&", "root", "root")
                .globalConfig(builder -> {
                    builder.author("alfred") // 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            .fileOverride() // 覆盖已生成文件
                            .outputDir("/Users/wenjian/srbbe/service-core/src/main/java") // 指定输出目录
                            .disableOpenDir();
                })
                .packageConfig(builder -> {
                    builder.parent("com.atguigu.srb.core") // 设置父包名
                            //.moduleName("mybatisplus") // 设置父包模块名
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "/Users/wenjian/srbbe/service-core/src/main/resources/mapper")); // 设置mapperXml生成路径
                })
                //.strategyConfig(builder -> {
                //    builder.addInclude("tbl_tbl1") // 设置需要生成的表名
                //            .addTablePrefix("tbl_","test_"); // 设置过滤表前缀
                //})
                .strategyConfig(build -> {
                    build.serviceBuilder()
                        .formatServiceFileName("%sService")
                        .formatServiceImplFileName("%sServiceImpl");
                    build.entityBuilder().enableLombok();
                    build.controllerBuilder().enableRestStyle().enableHyphenStyle();//开启生成restful api风格控制器，返回json
                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .execute();
    }
}
